//
//  HYLUserAccountViewModel.swift
//  iOSwechat
//
//  Created by apple on 16/2/28.
//  Copyright © 2016年 apple. All rights reserved.
//

import UIKit

class HYLUserAccountViewModel: NSObject {
    
    // 单例
    static let sharedInstance : HYLUserAccountViewModel = HYLUserAccountViewModel()

    var userAccout : HYLUserAccount?
    
    // 用户是否登录
    var userLogin: Bool {
        get{
            return userAccout != nil
        }
    }
    
    // 归档路径
    let accountPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last!.stringByAppendingString("/userAccount.plist")
    
    
    // 当单例第一次访问的时候回去沙盒里面解档账户
    private override init() {
        super.init()
       // print(accountPath)
        userAccout = loadUserAccount()
    }
    
 
    
    func loadAccessToken(codeString:String,loadAccessTokenCallBack:(error:NSError?) -> ()){
        //  加载accessToken 调用loadAccessToken方法加载请求
        HYLNetworkTool.sharedInstance.loadAccessToken(codeString, accessTokenFinished: { (response, error) -> () in
            // 3.7 判断是否失败
            if error != nil || response == nil{
                // 返回错误信息
                loadAccessTokenCallBack(error: error)
                print("获取 accessToken 失败\(error)")
                return
            }

            print("获取 accessToken 成功\(response)")
            // 3.8 字典转模型,并且赋值给属性
            self.userAccout = HYLUserAccount(dict: response!)

            // 3.9 保存沙盒
            self.saveUserAccount()
            
            // 回调:获取AccessToken没有有出错
            loadAccessTokenCallBack(error: nil)
        })

    }
    
    // 将对象保存到沙盒
    private func saveUserAccount(){
        if userAccout != nil {
            //print("\(accountPath)")
            NSKeyedArchiver.archiveRootObject(userAccout!, toFile: accountPath)
            
        }
    }
    
    
    // 将HYL Userccount从沙盒里面解档出来
    private func loadUserAccount() -> HYLUserAccount? {
        // 从沙盒中解档账号
        let account = NSKeyedUnarchiver.unarchiveObjectWithFile(accountPath) as? HYLUserAccount
        
        // 还要判断accessToken是否过期,如果过期了,说明AccessToken是没有用的,就不返回这个过期的账号
        // 过期时间: account?.expiresDate  2021-02-27 02:26:20 +0000
        // 当前时间: NSDate() 2016-02-29 02:31:08 +0000
        // 过期时间比当前时间大表示没有过去 >
        // 测试过期的情况
        if account != nil && account?.expiresDate?.compare(NSDate()) == NSComparisonResult.OrderedDescending{
            print("过期----\(account?.expiresDate)")
            
            return account
        } else {
            return nil
        }
    }
    
    
    // 获取用户信息
    func loadUserInfo(loadUserInfoBack:(error:NSError?) -> ()) {
        HYLNetworkTool.sharedInstance.loadUserInfo { (result, error) -> () in
            // 9.判断是否有值
            if error != nil {
                // print("获取用户信息失败\(error)")
                loadUserInfoBack(error: error)
                return
            }
            
            // 10.获取数据
            print("获取用户信息成功\(result)")
            self.userAccout?.screen_name = result?["screen_name"] as? String
            self.userAccout?.avatar_large = result?["avatar_large"] as? String
            
            // 11. 保存沙盒
            self.saveUserAccount()
            
            // 12. 执行闭包
            loadUserInfoBack(error: nil)
            
        }
    }
}









